package Leetcode;
import java.util.*;

/* 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 的那 两个 整数，并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。*/

public class Leetcode1 {
	public static void main (String [] args) {
		
	}
}


class Solution1 { //解法一，哈希表
    public int[] twoSum(int[] nums, int target) {
    	Map<Integer,Integer> a = new HashMap <Integer,Integer> ();
    	int len = nums.length;
    	for(int i=0;i<len;i++) {	//键为nums[i],健值为下标
    		if(a.containsKey(target-nums[i]))	//当遍历到表中存在该目标键时，返回下标
    			return new int [] {a.get(target-nums[i]),i};
    		else a.put(nums[i], i);		//若无目标则继续放入nums
    	}return new int [] {0};
    }
}

class Solution2 {	//暴力法
    public int[] twoSum(int[] nums, int target) {
        int i,j;
        for(i=0;i<nums.length;i++){
            for(j=1+i;j<nums.length;j++){
            	if(target-nums[i]==nums[j])
            		return new int[]{i,j};
            	else continue;
            }
        }
        return new int[0];
    }
}